深入理解 Claude Code: skills, hooks, subagents and more
36.AI 测试开发实战课 2026年6月25日 08:00
Claude 很强大,但是我发现在使用Claude Code的过程中,大部分人连他的10% 功力都未发挥到,简直太可惜了。
其实呢,只有利用好 Claude Code 中约束 Claude 行为的七种方法 CLAUDE.md 文件、规则、技能、子代理、钩子、输出样式,以及附加系统提示,驾驭它就会跟玩一样。
CLAUDE.md、Rules、Skills、Subagents、Hooks、Output styles、Append system prompt
每一种方法关系着三点: 何时加载上下文(加载时机)、sessions的持久性、携带多少的权限。
下面来详细说说:
CLAUDE.md
CLAUDE.md 是一个markdown文件,因所在位置不同,加载时机略有区别:
- • 始终加载 :根目录、共享仓库中的中的
CLAUDE.md文件以及个人偏好的claude.local.md。 - 在 session 会话开始时就会加载到上下文中,并在整个会话期间保持(常驻)。当Claude Code压缩对话时,会重新读取这些文件。
- • 按需:放在你初始会话文件夹下面的子目录里 的
CLAUDE.md文件。例如,app/api/CLAUDE.md,当 Claude 读取文件app/api时加载,而不是在会话开始时加载。 - 它与路径范围规则(允许开发者通过定义特定的文件路径匹配规则,实现指令的“按需加载”)的压缩行为相同。
当 Claude 读取该目录中的文件时,该子目录的 CLAUDE.md 文件会加载。
Rules
规则是 Markdown 文件,存储于.claude/rules/ 中,给 Claude 提供特定的约束或约定。
路径范围规则允许你只在操作相关文件时候才加载规则的指令,通过添加
paths一个字段来控制它们的加载。
例如:一个被限制为 src/api/** 上下文的规则在仅文档会话中保持上下文之外。只有当 Claude 读取该 src/api/ 目录内的文件时,规则才会被加载。
当指令涉及跨切入的关注点或文件出现在代码库多个(但不是全部)角落时,Path-scoped Rule 覆盖 CLAUDE.md 文件。
问自己:这条规则涉及的文件,是否都集中在同一个目录树下?
YES → 用嵌套 CLAUDE.md(例:整个 src/api/ 下的规范)
NO,分散在多处 → 用 Path-scoped Rule(例:散落各处的 *.handler.ts 文件)
ALL,全项目都需要 → 写入根目录 CLAUDE.md(例:禁止 console.log 进生产)
Skills
Skills以指令、脚本和资源的文件夹形式存在.claude/skills/ ,Claude 动态加载这些内容。每个技能都有 SKILL.md 一个文件,里面有名称、描述和正文。
只有名称和描述在会话开始时会被加载;当 Claude 调用该技能时,整个内容都会加载,无论是通过“/”命令手动调用还是自动调用。
Subagents
子代理在于.claude/agents/ 中定义,每个文件使用 YAML 格式(名称、描述,以及可选的模型和工具访问字段等),后面跟着一个正文,作为该子代理的系统提示。
子代理类似于技能,名称、描述和工具列表在会话开始时加载,但代理主体中的更大上下文不会自动调用。Claude通过代理工具调用它们,传递提示字符串。
子代理拥有独立的上下文空间,子代理只有最终消息(通常是多个子任务的汇总结果)和元数据会返回给主会话。
当像深度搜索、日志分析或依赖审计这样的副任务会让你的主要对话被中间结果占满,而这些结果你不会再引用时,就使用子代理。当你希望流程在主线程内进行时,使用技能,这样你可以看到并引导每一步。
Hooks
Hooks是用户自定义的命令、HTTP 端点或大型语言模型提示符,在Claude 生命周期中的特定事件(如文件编辑、工具调用或会话开始)触发,提供对 Claude 行为的更确定性控制。
Output styles
Output styles 是将.claude/output-styles/ 指令注入系统提示符的文件。它们从不压缩,每次会话开始时加载,且在会话内第一个请求后缓存。
由于输出样式位于系统提示中,权重比较高,因此应谨慎使用。
Appending the system prompt
在调用时传递,且仅适用于该调用,而不会作为会话间的文件持久化。
一些小技巧
“每次X,总是做Y”,就用 CLAUDE.md。 如果这种行为应该稳定发生,比如每次编辑后进行代码格式化,或者完成后发到Slack,那就用钩子。选择运行格式化器的模型和自动运行的格式化器是不同的。
CLAUDE.md 中写着“绝不要这样做” 。
Claude大多数时候会执行指令,但在压力下、长时间会话或模糊情况,或因任务访问文件中提示注入时,模型可能未能遵循提示规则。真正的护栏需要是确定性的,最好使用钩子和权限来做兜底。
CLAUDE.md 中的 30 行流程。 CLAUDE.md 是 Claude 应该一直保持的事实:构建命令、单代码库布局、团队约定。部署运行手册或安全审查检查表应放在 .claude/skills/ ,只有在调用时才加载。
一个没有路径的API专用规则。
如果规则只适用于 src/api/** ,用 paths: 来作用范围可以在无关工作时保持上下文脱离。
为项目级 CLAUDE.md 文件写入个人偏好。
所有基于文件的方法,每个Claude Code会话都会加载一个用户级对应文件,无论你在哪个仓库。个人偏好使用本地文件(始终使用语义提交消息)。保留项目级文件,用于团队范围但特定代码库的偏好设置。
参考资料
https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more